package com.design.model;

import com.design.model.behavior.impl.FlyBehavior;
import com.design.model.behavior.impl.QuackBehavior;

/**
 * 鸭子类
 *
 * @author by liuxin
 * @version 0.1
 */
public abstract class Duck {
    /**
     * 每只鸭子都需要实现接口的方法
     */
    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;

    public Duck() {
    }

    /**
     * 鸭子的行为
     */
    public abstract void swim();

    /**
     * 鸭子的外观
     */
    public abstract void display();

    /**
     * 鸭子的飞行行为
     */
    public void performFly() {
        //飞行
        flyBehavior.fly();
    }

    /**
     * 鸭子的叫声行为
     */
    public void performQuestion() {
        //叫声
        quackBehavior.quack();
    }

    /**
     * 使用get/set方法来动态的处理鸭子的接口实现类,增加灵活性
     *
     * @return
     */
    public FlyBehavior getFlyBehavior() {
        return flyBehavior;
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public QuackBehavior getQuackBehavior() {
        return quackBehavior;
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }
}
